package com.gxuwz.com_property.mail.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

/**
 * 发邮件Server类
 * */
@Service
public class MailService {

    @Autowired
    private JavaMailSender javaMailSender;
    /**
     * 定制发送附件和图片等
     * */
    /**
     * 发送带有附件和内嵌资源的复杂电子邮件
     *
     * @param from 发信人邮箱地址
     * @param to 收信人邮箱地址
     * @param subject 邮件主题
     * @param text 邮件内容（支持HTML）
     * @param filePath 附件文件路径
     * @param resId 内嵌资源的ID（在邮件内容HTML中通过cid:{resId}引用）
     * @param resPath 内嵌资源文件路径（如图片）
     */
    @Async
    public void sendComplexEmail(String from, String to, String subject, String text, String filePath, String resId, String resPath) {
        // 创建一个MimeMessage对象
        MimeMessage message = javaMailSender.createMimeMessage();

        try {

            // 使用MimeMessageHelper辅助类，并设置multipart多部分为true，允许添加附件和内嵌资源
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from); // 设置发信人
            helper.setTo(to); // 设置收信人
            helper.setSubject(subject); // 设置主题
            helper.setText(text, true); // 设置邮件内容（支持HTML）

            if (resId!=null && resPath!=null){
                // 设置邮件内嵌资源，如图片
                FileSystemResource res = new FileSystemResource(new File(resPath));
                helper.addInline(resId, res); // 使用资源ID关联内嵌资源
            }

            if (filePath!=null && filePath!=""){
                // 设置附件
                FileSystemResource file = new FileSystemResource(new File(filePath));
                String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
                helper.addAttachment(fileName, file); // 添加附件到邮件
            }

            // 发送邮件
            javaMailSender.send(message);
            System.out.println("邮件发送成功");

        } catch (MessagingException e) {
            System.out.println("邮件发送失败");
            e.printStackTrace();
        }

    }

}
